package com.superatom.concurrent.share;

public class SerialNumberGenerator {
    private static volatile int serialNumber = 0;

    /**
     * 非线性安全，每次调用都应该返回一个不同的值，但这样的实现与预期效果不符合。
     *
     * 可以证明：
     * 1、serialNumber++不是一个原子性操作（会涉及到一个读操作和一个写操作）。
     * 2、volatile没有对原子性发生什么影响。
     *
     * 只是保证了值会写入主存中，被其他线程可见。
     * @return
     */
    public /*synchronized*/ static int nextSerialNumber(){
        return serialNumber++;
    }
}
